require(["config"], function() {
	require(["jquery", "template", "header",  "zoom", "fly", "cookie"], function($, template) {

		function Cart() {
			this.products = null; // 保存购物车的商品数组结构
			this.load();
		}

		Cart.prototype = {
			constructor: Cart,
			
			load: function() {
				
				$.ajax("http://rap2api.taobao.org/app/mock/104550/example/1539934738847")
					.done(function(data){
						var data = {list:data.res_body.list};
						console.log(data);
						var html = template("prod_template" , data);
						
						$(".hot-recommend").html(html);
					});
				// 配置 cookie 插件自动转换 JS 与 JSON
				$.cookie.json = true;
				// 读取cookie中保存的购物车
				var products = this.products = $.cookie("cart") || [];
				if (products.length === 0) { // 购物车为空
					$("#empty").show().siblings(".not-empty").hide();
					return;
				}
				// 购物车非空
				$("#empty").hide().siblings("#cart_body").removeClass("hidden");
				// 渲染模板
				var data = {products: products}
				var html = template("cart-body-template", data);
				$("#cart_body").html(html);
				
				this.addListener();
			},
			addListener: function() {
				// 删除
				$(".cart-table tbody").on("click", ".del", $.proxy(this.delHandler, this));
				//删除全部商品
				$(".cart-table tfoot").on("click" , ".alldel",$.proxy(this.delallProdHanlder, this));
				// +/-数量
				$(".cart-table tbody").on("click", ".decrement,.increment", $.proxy(this.decIncHandler, this));
				// 输入修改数量
				$(".cart-table tbody").on("blur", ".amount", $.proxy(this.inputHandler, this));
				// 全选
				$(".ck_all").on("click", $.proxy(this.ckAllHandler, this));
				// 部分选中
				$(".cart-table tbody").on("click", ".ck_prod", $.proxy(this.ckProdHandler, this));
				$(".buy-btn").click(this.addtoCarHander);
				
			},
			//添加到购物车
			addtoCarHander :function(){
				var currentProduct = {
					id:$(".id").text(),
					name : $(".name").text(),
					img : $(".products img").attr("src"),
					price : $(".cake-price").text(),
					weightsize : $(".weightsize").text(),
					amount : 1,
					series : $(".series-name").text()
				};
				
				console.log(currentProduct);
				$.cookie.json = true; // 配置自动在JS值与JSON文本之间相互转换
				var products = $.cookie("cart") || [];
				// 判断是否已有选购
				var has = products.some(function(prod) {
					if (prod.id == currentProduct.id) { // 已有选购商品
						prod.amount++; // 数量自增
						return true;
					}
					return false;
				});
				if (!has) // 未选购
					products.push(currentProduct);
				console.log(products);
				$.cookie("cart", products, {expires: 10, path:"/"});
				//抛物线
				var end = $(".car").offset();
				end.top -= $(window).scrollTop();
				var start = {top: event.pageY - $(window).scrollTop(), left: event.pageX};
				var flyer = $(".products img").clone();
				flyer.attr("width","50px");
				flyer.attr("height","50px");
				flyer.fly({
					start,
					end,
					onEnd:function(){
						this.destroy();
					}
				});
			},
			//删除所有商品
			delallProdHanlder :function(){
				this.products = "";
				$.cookie("cart", this.products, {expires: 10, path: "/"});
				if (this.products.length === 0) { // 购物车为空
					$("#empty").show().siblings("#cart_body").hide();
				}
			},
			// 删除单行
			delHandler: function(event) {
				// 获取事件源元素(DOM元素)
				var src = event.target;
				var tr = $(src).parents("tr");
				// 获取商品 id
				var id = tr.find(".id").text();
				this.products = this.products.filter(function(prod) {
					return !(prod.id == id);
				});
			
				// 从 cookie 中保存的购物车结构中删除商品数据
				$.cookie("cart", this.products, {expires: 10, path: "/"});
				tr.remove();

				// 计算合计
				this.calcTotal();

				// 判断是否有购物车商品
				if (this.products.length === 0) { // 购物车为空
					$("#empty").show().siblings("#cart_body").hide();
				}
			},
			
			decIncHandler: function(event) {
				// 事件源元素（DOM）
				var src = event.target;
				// 事件源元素所在行(jQuery对象)
				var tr = $(src).parents("tr");
				// 商品 id
				var id = tr.find(".id").text();
				// 商品对象
				var product = this.products.filter(function(prod) {
					return prod.id == id;
				})[0];
				// +/-数量
				if ($(src).is(".decrement")) { // -
					if (product.amount <= 1)
						return;
					product.amount--;
				} else { // +
					product.amount++;
				}
				// 保存到 cookie 中（修改数量后的数组）
				$.cookie("cart", this.products, {expires:10, path:"/"});

				// 页面渲染
				tr.find(".amount").val(product.amount);
				tr.find(".sub").text(product.amount*product.price);

				// 计算合计
				this.calcTotal();
			},
			inputHandler: function(event) {
				// 事件源
				var src = event.target;
				// 所在行
				var tr = $(src).parents("tr");
				// 商品 id
				var id = tr.find(".id").text();
				// 商品对象
				var product = this.products.filter(prod=>prod.id == id)[0];
				// 修改数量
				var _amount = $(src).val();
				var reg = /^[1-9]\d*$/;
				if (!reg.test(_amount)) { // 格式有误，则还原为原有数量值
					$(src).val(product.amount);
					return;
				}
				product.amount = _amount;
				// 保存回 cookie 中
				$.cookie("cart", this.products, {expires:10, path:"/"});
				// 显示小计
				tr.find(".sub").text(product.amount * product.price);

				// 计算合计
				this.calcTotal();
			},
			
			ckAllHandler: function(event) {
				var status = $(event.target).prop("checked") // element.checked
				console.log(status);
			
				$(".ck_prod").prop("checked", status);

				// 计算合计
				this.calcTotal();
			},
			// 部分选中处理
			ckProdHandler: function(event) {
				// 获取购物车主体中选中的复选框个数
				var count = $(".ck_prod:checked").length;
				// 设置全选复选框选中状态
				var status = count === this.products.length;
				$(".ck_all").prop("checked", status);
				
				// 计算合计
				this.calcTotal();
			},
			
			calcTotal: function() {
				// 将选中行中的小计金额累加
				var sum = 0;
				var count = 0;
				// 选中行中的复选框
				$(".ck_prod:checked").each(function(index, element) {
					// console.log(index, element, this, element == this);
					sum += Number($(this).parents("tr").find(".sub").text());
					count += Number($(this).parents("tr").find(".six").find(".amount").val());
				});
				// 显示
				$(".count").text(count);
				$(".total").text(sum);
				
			}
		}

		new Cart();
	});
});